package com.faker.core.generate.data;

import com.faker.core.generate.data.code.common.datetime.DateTimeGenerator;
import com.faker.core.generate.data.code.common.primary.IncreaseIdGenerator;
import com.faker.core.generate.data.code.common.primary.UUIDGenerator;
import com.github.javafaker.Faker;

import java.util.ArrayList;
import java.util.Locale;

public class DataGenerator {


    /**
     * 生成全局变量自增序列
     * @param genKey
     * @return
     */
    public static Object dataGeneratorForGlobalIncrease(String genKey) {
        //自增序列
        if (genKey.equals("increase")) {
            //生成自增ID，tableName设置为字符串常量，无需发生变化
            return IncreaseIdGenerator.getIncreaseId("");
        }
        //UUID
        if (genKey.equals("uuid")) {
            return UUIDGenerator.getFullUUID();
        }

        return null;
    }


    /**
     * 通过的代码生成数据
     * @param genKeyList
     * @param tableNameObj
     * @return
     */
    public static Object dataGeneratorByCode(ArrayList<String> genKeyList, Object tableNameObj) {

        String levelOne = genKeyList.get(0);
        String levelTow = genKeyList.get(1);
        String levelThree = genKeyList.get(2);
        //根据一二三级生成数据

        //通用
        if (levelOne.equals("common")) {
            //主键
            if (levelTow.equals("primary")) {
                //自增序列
                if (levelThree.equals("increase")) {
                    return IncreaseIdGenerator.getIncreaseId(tableNameObj.toString());
                }
                //UUID
                if (levelThree.equals("uuid")) {
                    return UUIDGenerator.getFullUUID();
                }
            }

            //日期（YYYY-MM-DD）
            if (levelTow.equals("datetime")) {
                //今年的日期时间（YYYY-MM-DD HH:MM:SS）
                if (levelThree.equals("thisYearDatetime")) {
                    return DateTimeGenerator.getDateTime(0, "yyyy-MM-dd HH:MM:SS");
                }
                //去年的日期时间（YYYY-MM-DD HH:MM:SS）
                if (levelThree.equals("lastYearDatetime")) {
                    return DateTimeGenerator.getDateTime(1, "yyyy-MM-dd HH:MM:SS");
                }
                //今年的日期（YYYY-MM-DD）
                if (levelThree.equals("thisYearDate")) {
                    return DateTimeGenerator.getDateTime(0, "yyyy-MM-dd");
                }
                //去年的日期（YYYY-MM-DD）
                if (levelThree.equals("lastYearDate")) {
                    return DateTimeGenerator.getDateTime(1, "yyyy-MM-dd");
                }
                //时间（HH:MM:SS）
                if (levelThree.equals("time")) {
                    return DateTimeGenerator.getDateTime(0, "HH:MM:SS");
                }
            }
        }


        //中文
        if (levelOne.equals("zh")) {
            Faker faker = new Faker(new Locale("zh-CN"));
            //姓名
            if (levelTow.equals("name")) {
                //全名
                if (levelThree.equals("fullName")) {
                    return faker.name().fullName();
                }
                //姓氏
                if (levelThree.equals("firstName")) {
                    return faker.name().lastName();
                }
                //名字
                if (levelThree.equals("lastName")) {
                    return faker.name().firstName();
                }
            }
            //地址
            if (levelTow.equals("address")) {
                //全地址
                if (levelThree.equals("fullAddress")) {
                    return faker.name().fullName();
                }
            }

        }

        return null;
    }

}

